﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MySql.Data.MySqlClient;

namespace Example
{
    /// <summary>
    /// Patron fachada (Clase) encargada de todas las acciones con la base de datos a bajo nivel (Query's)
    /// </summary>
    class FachadaBdd
    {
        MySqlConnection connect;
        MySqlDataReader read;

        /// <summary>
        /// Host de la Bdd
        /// </summary>
        string host;

        /// <summary>
        /// Nombre del esquema de la Bdd
        /// </summary>
        string bbdd;

        /// <summary>
        /// Usuario de la Bdd 
        /// </summary>
        string user;

        /// <summary>
        /// Password de la Bdd
        /// </summary>
        string password;


        /// <summary>
        /// Constructor de la FachadaBdd
        /// </summary>
        /// <param name="sv">Host</param>
        /// <param name="bd">Nombre de la base de datos</param>
        /// <param name="us">Usuario de la Bdd</param>
        /// <param name="pw">Password de la Bdd</param>
        public FachadaBdd(string sv, string bd, string us, string pw)
        {
            host = sv;
            bbdd = bd; 
            user = us; 
            password = pw; 
        }

        /// <summary>
        /// Método que se encarga de hacer la conexión con la Bdd
        /// </summary>
        public MySqlConnection conectar() {
            connect = new MySqlConnection("Server=" + host + ";Uid=" + user + "; database=" + bbdd + "; use procedure bodies=False; Pwd=" + password); 
            connect.Open();
            return connect;
        }

        /// <summary>
        /// Método que se encarga de desconectar la Bdd
        /// </summary>
        public void desconectar() { 

            if (read != null) read.Close(); 

            connect.Close(); 
        }

        /// <summary>
        /// Método que se encarga de lanzar la sentencia MySQL (Ejecutarla - Query)
        /// </summary>
        /// <param name="sentenciaSql">Sentencia MySQL a hacer Query</param>
        public MySqlDataReader select(string sentenciaSql)
        {
            MySqlCommand cmd = new MySqlCommand();
            cmd.CommandText = sentenciaSql; 
            cmd.Connection = connect; 
            read = cmd.ExecuteReader(); 
            return read;
        }

        /// <summary>
        /// Método que se encarga de lanzar la sentencia MySQL (Ejecutarla - Update)
        /// </summary>
        /// <param name="SQL">Sentencia MySQL a hacer Update</param>
        public void update(string SQL)
        {
            MySqlCommand cmd = new MySqlCommand();
            cmd.CommandText = SQL;
            cmd.Connection = connect;
            cmd.ExecuteNonQuery();
        }
        
    }

 }

